package com.zk.algorithm.bit;

/**
 * LeetCode 233 HARD
 *
 * 329:
 * 个位: 1、11、21、31、41、51、61、71、81、91、
 *      101、111、121、131、141、151、161、171、181、191、
 *      201、211、221、231、241、251、261、271、281、291、
 *      301、311、321
 *      共 33 个
 *
 * 十位: 10、11、12、13、14、15、16、17、18、19、
 *      110 ~ 119、
 *      210 ~ 219、
 *      310 ~ 319
 *      共 40 个
 *
 * 百位: 100 ~ 199
 *      共 100 个
 *
 * @author zk
 */
public class NumberOfDigitOne {

    public int countDigitOne(int n) {
        if (n <= 0) return 0;

        int q = n, x = 1, ans = 0;

        do {

            int tmpAns = 0;

            System.out.println("q: " + q);

            int digit = q % 10;
            q /= 10;

            System.out.println("q = 10 * " + q + " + " + digit);

            tmpAns += q * x;
            System.out.println("digit == 0: " + q * x);

            if (digit == 1) {
                tmpAns += n % x + 1;
                System.out.println("digit == 1: " + (n % x + 1));
            }

            if (digit > 1) {
                tmpAns += x;
                System.out.println("digit > 1: " + x);
            }

            System.out.println(x + " 位 result: " + tmpAns);
            System.out.println();

            ans += tmpAns;

            x *= 10;
        } while (q > 0);



        return ans;
    }

    public static void main(String...args) {
        NumberOfDigitOne numberOfDigitOne = new NumberOfDigitOne();

//        System.out.println(String.format("15: %d", numberOfDigitOne.countDigitOne(15)));
//        System.out.println(String.format("21: %d", numberOfDigitOne.countDigitOne(21)));
            System.out.println(String.format("81: %d", numberOfDigitOne.countDigitOne(12)));
//        System.out.println(String.format("329: %d", numberOfDigitOne.countDigitOne(329)));
//        System.out.println(String.format("2451: %d", numberOfDigitOne.countDigitOne(2451)));
//        System.out.println(String.format("98: %d", numberOfDigitOne.countDigitOne(98)));
//        System.out.println(String.format("123: %d", numberOfDigitOne.countDigitOne(123)));

    }

}
